package com.heima.media.listener;

import com.alibaba.fastjson.JSON;
import com.heima.media.entity.WmNews;
import com.heima.media.service.IAuditService;
import org.redisson.api.RBlockingQueue;
import org.redisson.api.RDelayedQueue;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.annotation.PostConstruct;
import java.util.concurrent.TimeUnit;

@Service
public class PublishListener {
    @Autowired
    private RedissonClient redissonClient;
    @Autowired
    private IAuditService iAuditService;

    @PostConstruct   // 实例化后自动执行该方法
    public void init(){
        // 开启线程执行任务
        new Thread(new Runnable() {
            @Override
            public void run() {
                // 开启redisson队列的监听
                RBlockingQueue<String> queue=redissonClient.getBlockingQueue("article-publish");
                // 启动时发送一条初始化消息,用于通道的建立
                // 创建延迟队列
                RDelayedQueue<String> delayedQueue = redissonClient.getDelayedQueue(queue);
                // 使用延迟队列发送延迟消息 参数  消息  延迟时间  时间单位
                delayedQueue.offer("init",1, TimeUnit.SECONDS);
                while (true) {
                    String message = null;
                    try {
                        //过滤
                        message = queue.poll(1, TimeUnit.MINUTES);
                        //将消息转换为对象
                        WmNews wmNews = JSON.parseObject(message, WmNews.class);
                        // 重新进入审核流程
                        iAuditService.audit(wmNews);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        });
    }
}
